package pers.xiaojun.boot.module.system.service.tenant;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import pers.xiaojun.boot.module.system.controller.tenant.vo.tenant.TenantQueryReqVO;
import pers.xiaojun.boot.module.system.controller.tenant.vo.tenant.TenantSaveReqVO;
import pers.xiaojun.boot.module.system.dao.entity.tenant.TenantDO;

import java.util.Collection;

/**
 * 租户服务层接口
 *
 * @author xiaojun
 * @since 2025-11-22
 */
public interface TenantService extends IService<TenantDO> {

    /**
     * 保存租户
     *
     * @param saveVO 保存租户的信息
     * @return 租户信息
     */
    TenantDO saveTenant(TenantSaveReqVO saveVO);

    /**
     * 更新租户
     *
     * @param updateVO 更新租户的信息
     * @return 租户信息
     */
    TenantDO updateTenant(TenantSaveReqVO updateVO);

    /**
     * 根据Id删除租户
     *
     * @param tenantId 租户套餐Id
     */
    void removeTenantById(Long tenantId);

    /**
     * 根据Id批量删除租户
     *
     * @param tenantIds 租户套餐Id列表
     */
    void removeTenantByIds(Collection<Long> tenantIds);

    /**
     * 根据租户套餐Id获取租户信息
     *
     * @param tenantId 租户套餐Id
     * @return 租户信息
     */
    TenantDO getTenantById(Long tenantId);

    /**
     * 根据租户名称获取租户信息
     *
     * @param tenantName 租户名称
     * @return 租户信息
     */
    TenantDO getTenantByName(String tenantName);

    /**
     * 分页/条件查询租户
     *
     * @param queryVO 查询条件
     * @return 分页数据
     */
    Page<TenantDO> listTenantsPage(TenantQueryReqVO queryVO);

    /**
     * 校验租户是否可用
     *
     * @param tenantId 租户Id
     */
    void validTenantAvailable(Long tenantId);

}
